// 大鱼吃小鱼问题
// 给定一个数组arr，每个值代表鱼的体重
// 每一轮每条鱼都会吃掉右边离自己最近比自己体重小的鱼，每条鱼向右找只吃一条
// 但是吃鱼这件事是同时发生的，也就是同一轮在A吃掉B的同时，A也可能被别的鱼吃掉
// 如果有多条鱼在当前轮找到的是同一条小鱼，那么在这一轮，这条小鱼同时被这些大鱼吃
// 请问多少轮后，鱼的数量就固定了
// 比如 : 8 3 1 5 6 7 2 4
// 第一轮 : 8吃3；3吃1；5、6、7吃2；4没有被吃。数组剩下 8 5 6 7 4
// 第二轮 : 8吃5；5、6、7吃4。数组剩下 8 6 7
// 第三轮 : 8吃6。数组剩下 8 7
// 第四轮 : 8吃7。数组剩下 8。
// 过程结束，返回4
// 测试链接 : https://www.nowcoder.com/practice/77199defc4b74b24b8ebf6244e1793de

#include <bits/stdc++.h>

using namespace std;

const int MAXN = 1e5 + 1;
int arr[MAXN];
int st[MAXN][2];
int r, n;

int read()
{
    char ch = getchar();
    int x = 0, f = 1;
    while(ch < '0' || ch > '9')
    {
        if(ch == '-') f = -1;
        ch = getchar();
    }
    while(ch >= '0' && ch <= '9')
    {
        x = 10 * x + ch - '0';
        ch = getchar();
    }
    return f * x;
}

// arr[0...n-1]鱼的体重
// st[...]随便用
int turns()
{
    r = 0;
    int ans = 0;
    for(int i = n - 1, curTurn; i >= 0; --i)
    {
        // i号鱼，arr[i]
        // 0轮是初始
        curTurn = 0;
        while(r > 0 && st[r - 1][0] < arr[i])
        {
            curTurn = max(curTurn + 1, st[--r][1]);
        }
        st[r][0] = arr[i];
        st[r++][1] = curTurn;
        ans = max(ans, curTurn);
    }
    return ans;
}

int main()
{
    n = read();
    for(int i = 0; i < n; ++i) arr[i] = read();
    printf("%d\n", turns());

    return 0;
}